package com.gbas.mus.model;

import com.gbas.mus.model.lances.*;

public class FasePar extends Fase {
    int jugadoresConPar = 0;

    public FasePar(Ronda ronda) {
        super(ronda);

        // Check Pares en ambos equipos
        boolean parEquipo[] = new boolean[2];

        getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, "Comienza fase Par");

        JugadorMus jugardor = jugs().getJugador();
        for (int k = 0; k < 4; k++) {
            if (hayPar(jugardor.getNaipes())) {
                jugadoresConPar++;
                parEquipo[jugardor.getEquipo()] = true;
                getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, jugardor.getNombre() + " tiene par");
            } else {
                getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, jugardor.getNombre() + " no tiene par");
            }
            jugardor = jugs().getNextJugador(jugardor);
        }
        if (parEquipo[0] && parEquipo[1]) {
            // Se juega, hay pares en ambos equipos
            jugardor = jugs().getJugador();
            for (int k = 0; k < 4; k++) {
                if (hayPar(jugardor.getNaipes())) {
                    permiteAccion(jugardor, OP_INPUT.APUESTA);
                    break;
                }
                jugardor = jugs().getNextJugador(jugardor);
            }
        } else {
            if (parEquipo[0] && !parEquipo[1]) {
                getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, "Equipo 2 no tiene par");

            } else if (parEquipo[1] && !parEquipo[0]) {
                getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, "Equipo 1 no tiene par");

            } else {
                // O solo tiene 1 equipo o no tiene ninguno, y se pasa
                getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, "Nadie tiene par");
            }
            limpiaAccion();
            //ronda.nuevaFase(new FaseJuego(ronda));
        }

    }

    void nextFase() {
        final FaseJuego juego = new FaseJuego(ronda);
        ronda.nuevaFase(juego);
        if (juego.turnoPara.size() == 0)
            juego.nextFase();

    }

    public boolean lanceValido(Lance lance) {
        return esLanceDeJuego(lance);
    }

    public void doLance(Lance lance) {
        if (lance instanceof LanceAceptoOrdago) {
            getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, lance.getJugador().getNombre() + " acepta el Ordago a Par");
            ronda.nuevaFase(new FaseConteo(ronda, true));
        } else if (lance instanceof LanceOrdago) {
            getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, lance.getJugador().getNombre() + " se juega un Ordago a Pares");
            turnoASiguienteParejaPares(lance.getJugador(), OP_INPUT.RESPUESTA_ORDAGO);
        } else if (lance instanceof LancePaso) {
            getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, lance.getJugador().getNombre() + " pasa");
            turnoPara.remove(lance.getJugador());
            if (turnoPara.size() == 0) {
                if (hayNoPasos()) {
                    if (sumaPuntosPorJinete()) {
                        ronda.nuevaFase(new FaseConteo(ronda));
                    } else {
                        nextFase();
                    }
                } else {
                    // Solo son pasos, si son 4, se pasa
                    if (lances.size() == jugadoresConPar) {
                        getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, "se fu�");
                        nextFase();
                    } else {
                        turnoASiguienteJugadorConPar(lance.getJugador(), OP_INPUT.APUESTA);
                    }
                }
            }
        } else if (lance instanceof LanceEnvido) {
            getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, lance.getJugador().getNombre() + " envida 2");
            turnoASiguienteParejaPares(lance.getJugador(), OP_INPUT.RESPUESTA);
        } else if (lance instanceof LanceVer) {
            getJugarMus().accionMesa(Accion.MENSAJE_TEXTO, lance.getJugador().getNombre() + " las ve");
            nextFase();
        }
    }

    public String getNombre() {
        return "Par";
    }
}
